namespace KnowTs {
    let zks: void = undefined;

    // never类型表示不会返回任何数据(报错) 或者在函数中表示永远无法结束这个函数
    function zksfn(): never {
        throw new Error("error");
    }

    function zksfn2(): never {
        while (true) {
            console.log(555)
        }
    }

    let ss:unknown=undefined;
    let ss2:unknown=null;

    type sad = string | never;
    let adas: sad;
    adas=""
    //   unknow类型表示不确定具体类型是很好的类型保护
    // 初始值为unknow可以赋值给任意类型

    let c: unknown = null;
    c = 5;
    c = false;
    //   但不能给其他值赋值
    //   ! 不能将类型“unknown”分配给类型“string”
    //   let cc: string = c;
    // 此时需要使用断言
    let cc: string = c as string;


    // 注意 never与任何类型进行交叉never
    type aa2=never &string
    type aaa2=never& number&string
    type aaaa2=never & boolean&string

    // 注意 never与任何类型进行联合都是后类型
    type aa22=never |string
    type aaa22=never| number|string
    type aaaa22=never | boolean|string



    // 注意 unknown与任何类型进行交叉都是后一类型
    type aa=unknown &string
    type aaa=unknown& number&string
    type aaaa=unknown & boolean&string

    // 注意 unknown与任何类型进行联合都是unknown
    type aa1=unknown |string;
    type aaa1=unknown|number
    type aaaa1=unknown|boolean|string
}
